package com.mk.web.structure.sort.selection;

import java.util.Arrays;

/**
 * 选择排序
 * Created by WangChen on 2018/12/19 10:37.
 */
public class SelectionSort {

    public static void main(String [] args){
        int[] array = {6, 5, 7, 3, 8, 2, 3, 4, 1, 9, 13, 11};// 1.要排序的数组
        // 执行插入排序
        selectionSort(array);
        // 输出结果
        System.out.println(Arrays.toString(array));
    }

    /**
     * 比较 + 交换
     * 基本思想：每一次从待排序的数据元素中选出最小（或最大）的一个元素，存放在序列的起始位置，直到全部待排序的数据元素排完。
     * 是不稳定的
     * T(n) = O(n^2)。
     *
     * ①. 从待排序序列中，找到关键字最小的元素；
     * ②. 如果最小元素不是待排序序列的第一个元素，将其和第一个元素互换；
     * ③. 从余下的 N - 1 个元素中，找出关键字最小的元素，重复①、②步，直到排序结束。
     */
    /**
     * 自己写的
     */
    public static void selectionSort(int[] arr){
        for (int i = 0; i < arr.length; i++){
            int min = arr[i];
            int minIdx = i;
            for (int j = i + 1; j < arr.length; j++){
                if (arr[j] < min){
                    min = arr[j];
                    minIdx = j;
                }
            }
            if (minIdx != i){
                int tmp = arr[i];
                arr[i] = arr[minIdx];
                arr[minIdx] = tmp;
            }
        }
    }
}
